/**
 * @param {number} amount
 * @param {number[]} coins
 * @return {number}
 */
 var change = function(amount, coins) {  // 状态转移方程：F(i)=F(i-coins[0])+F(i-coins[1])+F(i-coins[2])······
    let length=coins.length;
    let res=new Array(amount+1).fill(0);  // 存放第i个的总数
    res[0]=1;
    for(let j=0;j<length;j++){     // 核心，先遍历coins，在遍历amount
        for(let i=1;i<=amount;i++){    // 遍历amount时，只能添加当前coins，不能添加前面的coins，避免了重复
            if(coins[j]<=i){
                res[i]+=res[i-coins[j]];
            }
        }
    }
    return res[amount];
};
console.log(change(
    5,
    [1,2,5]));